package sucre

class AlumnoController {

    def loginService
    def beforeInterceptor = [action:this.&auth]
    def auth = {
        def result =loginService.validarAcceso(
            session["seguridad_usuario"],
            session["seguridad_funcionesHabilitadas"],
            controllerName,actionName,request.getRemoteAddr().toString())
        if(!result) {
            redirect(controller:"login",action:"auth",params:['acceso':false])
            return false
        }
    }
    def index = {}
    // the delete, save and update actions only accept POST requests
    static allowedMethods = [delete:'POST', save:'POST', update:'POST']

    def parametersService
    def list = {
        params.max = parametersService.getInt("paginacion.maxRegPagina")
        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
        
        def query={
            
            if(params.searchField){
                ilike('nombres','%'+params.searchField+'%')
            }
        }
        def alumnoList = Alumno.createCriteria().list(params,query)
        if (alumnoList.size() <= 0 ) {
            query={
                if(params.searchField){
                    ilike('cedula','%'+params.searchField+'%')
                }     
            }
            alumnoList = Alumno.createCriteria().list(params,query)
        }
        if (alumnoList.size() <= 0 ) {
            query={
                if(params.searchField){
                    ilike('apellidos','%'+params.searchField+'%')
                }
            }
            alumnoList = Alumno.createCriteria().list(params,query)
        }
        
        [ alumnoInstanceList:  alumnoList,
            alumnoInstanceTotal: alumnoList.getTotalCount()]       
    }
    def create = {
        def alumnoInstance = new Alumno()
        alumnoInstance.properties = params
        if(params.eOc=='edit'){
            alumnoInstance=Alumno.findById(params.id)
        }else{
            flash.message=''
            params.eOc='create'
        }
        return [alumnoInstance:alumnoInstance,eOc:params.eOc]
    }
    def save = {
        def listaErrores=[]
        //-----------------------formateo la fecha --------------------------
        def formateador          = new java.text.SimpleDateFormat("dd/MM/yyyy")
        if (params.fechaDeNacimiento != null && params.fechaDeNacimiento != "") {
            params.fechaDeNacimiento = formateador.parse(params.fechaDeNacimiento)
        }
        params.especialidad      = Especialidad.get(params.especialidad)
        def alumnoInstance       = new Alumno(params) 
        if(params.eOc=='edit'){
            println "params.id: " + params.id
            alumnoInstance=Alumno.get(params.id)
            alumnoInstance.properties=params
        } else if(params.eOc=='create'){
            //-----------------------creo la inscripcionID ----------------------
            String idInscripcion = UUID.randomUUID().toString()
            println "idInscripcion generado:" + idInscripcion
            alumnoInstance.idInscripcion = idInscripcion
            def formateador2 = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss")
            alumnoInstance.fechaInscripcion = formateador2.parse(formateador2.format(new Date()))
        }
        Alumno.withTransaction{ status ->
            try{
                if(!alumnoInstance.hasErrors() && alumnoInstance.save(flush:true)) {

                    if(params.eOc=='create'){
                        //registrar auditoria def.titular.creado
                        flash.message=message(code:'def.registro.creado',
                            args:[alumnoInstance])
                    }else{
                        //def.titular.actualizado
                        flash.message=message(code:'def.registro.actualizado',
                            args:[alumnoInstance])
                    }
                        
                    if(params.eOc=='create'){
                        params.eOc='edit'
                    }
                }
            }catch(Exception e){
                println e
                listaErrores.add(message(code:'def.registro.error.Creando'))
                status.setRollbackOnly()
            }
        }
        render(view:'create',model:[alumnoInstance:alumnoInstance,
                eOc:params.eOc,upd:'si',listaErrores:listaErrores])
    }
    def search={
        redirect(action:list,params:[searchField:params.searchField])
    }
    def delete = {
        def listaErrores=[]
        def alumnoInstance = Alumno.get(params.id)
        flash.message=message(code:'def.noeliminado', args:[alumnoInstance])
        render(view:'create',model:[alumnoInstance:new Alumno(),upd:'si',
               listaErrores:listaErrores])
    }
   
}
